package com.tiantian.quanminxiu.utils.face;

import android.content.Context;
import android.text.Spannable;
import android.util.Log;


import com.tiantian.quanminxiu.R;

import java.util.HashMap;

/**
 * Created by admin on 2016/8/12.
 */
public final class EmojiconHandler {
    private EmojiconHandler() {
    }

    private static final HashMap<String,Integer> sEmojisMap = new HashMap<String,Integer>();

    static {
        // 所有解析表情图片都在这里。
        sEmojisMap.put("f1", R.drawable.emoji_1);
        sEmojisMap.put("f2", R.drawable.emoji_2);
        sEmojisMap.put("f3", R.drawable.emoji_3);
        sEmojisMap.put("f4", R.drawable.emoji_4);
        sEmojisMap.put("f5", R.drawable.emoji_5);
        sEmojisMap.put("f6", R.drawable.emoji_6);
        sEmojisMap.put("f7", R.drawable.emoji_7);
        sEmojisMap.put("f8", R.drawable.emoji_8);
        sEmojisMap.put("f9", R.drawable.emoji_9);
        sEmojisMap.put("f10", R.drawable.emoji_10);
        sEmojisMap.put("f11", R.drawable.emoji_11);
        sEmojisMap.put("f12", R.drawable.emoji_12);
        sEmojisMap.put("f13", R.drawable.emoji_13);
        sEmojisMap.put("f14", R.drawable.emoji_14);
        sEmojisMap.put("f15", R.drawable.emoji_15);
        sEmojisMap.put("f16", R.drawable.emoji_16);
        sEmojisMap.put("f17", R.drawable.emoji_17);
        sEmojisMap.put("f18", R.drawable.emoji_18);
        sEmojisMap.put("f19", R.drawable.emoji_19);
        sEmojisMap.put("f20", R.drawable.emoji_20);
        sEmojisMap.put("f21", R.drawable.emoji_21);
        sEmojisMap.put("f22", R.drawable.emoji_22);
        sEmojisMap.put("f23", R.drawable.emoji_23);
        sEmojisMap.put("f24", R.drawable.emoji_24);
        sEmojisMap.put("f25", R.drawable.emoji_25);
        sEmojisMap.put("f26", R.drawable.emoji_26);
        sEmojisMap.put("f27", R.drawable.emoji_27);
        sEmojisMap.put("f28", R.drawable.emoji_28);
        sEmojisMap.put("f29", R.drawable.emoji_29);
        sEmojisMap.put("f30", R.drawable.emoji_30);
        sEmojisMap.put("f31", R.drawable.emoji_31);
        sEmojisMap.put("f32", R.drawable.emoji_32);
        sEmojisMap.put("f33", R.drawable.emoji_33);
        sEmojisMap.put("f34", R.drawable.emoji_34);
        sEmojisMap.put("f35", R.drawable.emoji_35);
        sEmojisMap.put("f36", R.drawable.emoji_36);
        sEmojisMap.put("f37", R.drawable.emoji_37);
        sEmojisMap.put("f38", R.drawable.emoji_38);
        sEmojisMap.put("f39", R.drawable.emoji_39);
        sEmojisMap.put("f40", R.drawable.emoji_40);
        sEmojisMap.put("f41", R.drawable.emoji_41);
        sEmojisMap.put("f42", R.drawable.emoji_42);
        sEmojisMap.put("f43", R.drawable.emoji_43);
        sEmojisMap.put("f44", R.drawable.emoji_44);
        sEmojisMap.put("f45", R.drawable.emoji_45);
        sEmojisMap.put("f46", R.drawable.emoji_46);
        sEmojisMap.put("f47", R.drawable.emoji_47);
        sEmojisMap.put("f48", R.drawable.emoji_48);
        sEmojisMap.put("f49", R.drawable.emoji_49);
        sEmojisMap.put("f50", R.drawable.emoji_50);
        sEmojisMap.put("f51", R.drawable.emoji_51);
        sEmojisMap.put("f52", R.drawable.emoji_52);
        sEmojisMap.put("f53", R.drawable.emoji_53);
        sEmojisMap.put("f54", R.drawable.emoji_54);
        sEmojisMap.put("f55", R.drawable.emoji_55);
        sEmojisMap.put("f56", R.drawable.emoji_56);

        sEmojisMap.put("v1", R.drawable.emoji_v1);
        sEmojisMap.put("v2", R.drawable.emoji_v2);
        sEmojisMap.put("v3", R.drawable.emoji_v3);
        sEmojisMap.put("v4", R.drawable.emoji_v4);
        sEmojisMap.put("v5", R.drawable.emoji_v5);
        sEmojisMap.put("v6", R.drawable.emoji_v6);
        sEmojisMap.put("v7", R.drawable.emoji_v7);
        sEmojisMap.put("v8", R.drawable.emoji_v8);
        sEmojisMap.put("v9", R.drawable.emoji_v9);
        sEmojisMap.put("v10", R.drawable.emoji_v10);
        sEmojisMap.put("v11", R.drawable.emoji_v11);
        sEmojisMap.put("v12", R.drawable.emoji_v12);
        sEmojisMap.put("v13", R.drawable.emoji_v13);
        sEmojisMap.put("v14", R.drawable.emoji_v14);
        sEmojisMap.put("v15", R.drawable.emoji_v15);
        sEmojisMap.put("v16", R.drawable.emoji_v16);
        sEmojisMap.put("v17", R.drawable.emoji_v17);
        sEmojisMap.put("v18", R.drawable.emoji_v18);
        sEmojisMap.put("v19", R.drawable.emoji_v19);
        sEmojisMap.put("v20", R.drawable.emoji_v20);
        sEmojisMap.put("v21", R.drawable.emoji_v21);
        sEmojisMap.put("v22", R.drawable.emoji_v22);
        sEmojisMap.put("v23", R.drawable.emoji_v23);
        sEmojisMap.put("v24", R.drawable.emoji_v24);

        sEmojisMap.put("g1", R.drawable.emoji_g1);
        sEmojisMap.put("g2", R.drawable.emoji_g2);
        sEmojisMap.put("g3", R.drawable.emoji_g3);
        sEmojisMap.put("g4", R.drawable.emoji_g4);
        sEmojisMap.put("g5", R.drawable.emoji_g5);
        sEmojisMap.put("g6", R.drawable.emoji_g6);
        sEmojisMap.put("g7", R.drawable.emoji_g7);
        sEmojisMap.put("g8", R.drawable.emoji_g8);
        sEmojisMap.put("g9", R.drawable.emoji_g9);
        sEmojisMap.put("g10", R.drawable.emoji_g10);

        sEmojisMap.put("level0", R.drawable.icon_level_0);
        sEmojisMap.put("level1", R.drawable.icon_level_1);
        sEmojisMap.put("level2", R.drawable.icon_level_2);
        sEmojisMap.put("level3", R.drawable.icon_level_3);
        sEmojisMap.put("level4", R.drawable.icon_level_4);
        sEmojisMap.put("level5", R.drawable.icon_level_5);
        sEmojisMap.put("level6", R.drawable.icon_level_6);
        sEmojisMap.put("level7", R.drawable.icon_level_7);
        sEmojisMap.put("level8", R.drawable.icon_level_8);
        sEmojisMap.put("level9", R.drawable.icon_level_9);
        sEmojisMap.put("level10", R.drawable.icon_level_10);
        sEmojisMap.put("level11", R.drawable.icon_level_11);
        sEmojisMap.put("level12", R.drawable.icon_level_12);
        sEmojisMap.put("level13", R.drawable.icon_level_13);
        sEmojisMap.put("level14", R.drawable.icon_level_14);
        sEmojisMap.put("level15", R.drawable.icon_level_15);
        sEmojisMap.put("level16", R.drawable.icon_level_16);
        sEmojisMap.put("level17", R.drawable.icon_level_17);
        sEmojisMap.put("level18", R.drawable.icon_level_18);
        sEmojisMap.put("level19", R.drawable.icon_level_19);
        sEmojisMap.put("level20", R.drawable.icon_level_20);
        sEmojisMap.put("level21", R.drawable.icon_level_21);
        sEmojisMap.put("level22", R.drawable.icon_level_22);
        sEmojisMap.put("level23", R.drawable.icon_level_23);
        sEmojisMap.put("level24", R.drawable.icon_level_24);
        sEmojisMap.put("level25", R.drawable.icon_level_25);
        sEmojisMap.put("level26", R.drawable.icon_level_26);
        sEmojisMap.put("level27", R.drawable.icon_level_27);
        sEmojisMap.put("level28", R.drawable.icon_level_28);
        sEmojisMap.put("level29", R.drawable.icon_level_29);
        sEmojisMap.put("level30", R.drawable.icon_level_30);
        sEmojisMap.put("level31", R.drawable.icon_level_31);
        sEmojisMap.put("level32", R.drawable.icon_level_32);
        sEmojisMap.put("level33", R.drawable.icon_level_33);
        sEmojisMap.put("level34", R.drawable.icon_level_34);
        sEmojisMap.put("level35", R.drawable.icon_level_35);
        sEmojisMap.put("level36", R.drawable.icon_level_36);

        sEmojisMap.put("anchorlevel1", R.drawable.icon_anchor_1);
        sEmojisMap.put("anchorlevel2", R.drawable.icon_anchor_2);
        sEmojisMap.put("anchorlevel3", R.drawable.icon_anchor_3);
        sEmojisMap.put("anchorlevel4", R.drawable.icon_anchor_4);
        sEmojisMap.put("anchorlevel5", R.drawable.icon_anchor_5);
        sEmojisMap.put("anchorlevel6", R.drawable.icon_anchor_6);
        sEmojisMap.put("anchorlevel7", R.drawable.icon_anchor_7);
        sEmojisMap.put("anchorlevel8", R.drawable.icon_anchor_8);
        sEmojisMap.put("anchorlevel9", R.drawable.icon_anchor_9);
        sEmojisMap.put("anchorlevel10", R.drawable.icon_anchor_10);
        sEmojisMap.put("anchorlevel11", R.drawable.icon_anchor_11);
        sEmojisMap.put("anchorlevel12", R.drawable.icon_anchor_12);
        sEmojisMap.put("anchorlevel13", R.drawable.icon_anchor_13);
        sEmojisMap.put("anchorlevel14", R.drawable.icon_anchor_14);
        sEmojisMap.put("anchorlevel15", R.drawable.icon_anchor_15);
        sEmojisMap.put("anchorlevel16", R.drawable.icon_anchor_16);
        sEmojisMap.put("anchorlevel17", R.drawable.icon_anchor_17);
        sEmojisMap.put("anchorlevel18", R.drawable.icon_anchor_18);
        sEmojisMap.put("anchorlevel19", R.drawable.icon_anchor_19);
        sEmojisMap.put("anchorlevel20", R.drawable.icon_anchor_20);
        sEmojisMap.put("anchorlevel21", R.drawable.icon_anchor_21);
        sEmojisMap.put("anchorlevel22", R.drawable.icon_anchor_22);
        sEmojisMap.put("anchorlevel23", R.drawable.icon_anchor_23);
        sEmojisMap.put("anchorlevel24", R.drawable.icon_anchor_24);
        sEmojisMap.put("anchorlevel25", R.drawable.icon_anchor_25);
        sEmojisMap.put("anchorlevel26", R.drawable.icon_anchor_26);
        sEmojisMap.put("anchorlevel27", R.drawable.icon_anchor_27);
        sEmojisMap.put("anchorlevel28", R.drawable.icon_anchor_28);
        sEmojisMap.put("anchorlevel29", R.drawable.icon_anchor_29);
        sEmojisMap.put("anchorlevel30", R.drawable.icon_anchor_30);

        sEmojisMap.put("roomadmin", R.drawable.icon_roomadmin);
        sEmojisMap.put("officialadmin", R.drawable.icon_officialadmin);
        sEmojisMap.put("VIP", R.drawable.icon_vip);
        sEmojisMap.put("Guardian", R.drawable.icon_guard_month);
    }

    private static int getEmojiResource(Context context, String codePoint) {
        return sEmojisMap.get(codePoint);
    }

    /**
     * Convert emoji characters of the given Spannable to the according emojicon.
     *
     * @param context
     * @param text
     * @param emojiSize
     * @param emojiAlignment
     * @param textSize
     */
    public static void addEmojis(Context context, Spannable text, int emojiSize, int emojiAlignment, int textSize) {
        addEmojis(context, text, emojiSize, emojiAlignment, textSize, 0, -1, false);
    }

    /**
     * Convert emoji characters of the given Spannable to the according emojicon.
     *
     * @param context
     * @param text
     * @param emojiSize
     * @param emojiAlignment
     * @param textSize
     * @param index
     * @param length
     */
    public static void addEmojis(Context context, Spannable text, int emojiSize, int emojiAlignment, int textSize, int index, int length) {
        addEmojis(context, text, emojiSize, emojiAlignment, textSize, index, length, false);
    }

    /**
     * Convert emoji characters of the given Spannable to the according emojicon.
     *
     * @param context
     * @param text
     * @param emojiSize
     * @param emojiAlignment
     * @param textSize
     * @param useSystemDefault
     */
    public static void addEmojis(Context context, Spannable text, int emojiSize, int emojiAlignment, int textSize, boolean useSystemDefault) {
        addEmojis(context, text, emojiSize, emojiAlignment, textSize, 0, -1, useSystemDefault);
    }

    /**
     * Convert emoji characters of the given Spannable to the according emojicon.
     *
     * @param context
     * @param text
     * @param emojiSize
     * @param emojiAlignment
     * @param textSize
     * @param index
     * @param length
     * @param useSystemDefault
     */
    public static void addEmojis(Context context, Spannable text, int emojiSize, int emojiAlignment, int textSize, int index, int length, boolean useSystemDefault) {
        if (useSystemDefault) {
            return;
        }
        int textLength = text.length();
        int textLengthToProcessMax = textLength - index;
        int textLengthToProcess = length < 0 || length >= textLengthToProcessMax ? textLength : (length + index);

        // remove spans throughout all text
        EmojiconSpan[] oldSpans = text.getSpans(0, textLength, EmojiconSpan.class);
        for (int i = 0; i < oldSpans.length; i++) {
            text.removeSpan(oldSpans[i]);
        }

        int skip = 1;
        String content = text.toString();
        for (int i = index; i < textLengthToProcess; i += skip) {
            skip = 1;
            char c = content.charAt(i);
            if(c=='['){
                if(content.indexOf("]",i)>i){
                    String emoji = content.substring(i + 1, content.indexOf("]", i));
                    if(!emoji.isEmpty()&&sEmojisMap.containsKey(emoji)){
                        int icon = sEmojisMap.get(emoji);
                        skip += (emoji.length()+1);
                        if (icon > 0) {
                            text.setSpan(new EmojiconSpan(context, icon, emojiSize, emojiAlignment, textSize), i, i + skip, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
                        }
                    }
                }
            }
        }
    }
}


